package my.mark.mybaibaoxiang.juc.biji02.lock;

/**
 * @author twotiger-wxm.
 * 验证对象锁和类锁互不干扰，类锁只是一个概念上的东西，并不是真实存在的。
 * 就相当于下方示例中，
 * testClassLock.duixiangLock();和TestClassLock.classLock();
 * 调用的是两个实例。
 * 每个类只有一个类锁，多线程调用同一个类锁是能锁住的。
 */
public class TestClassLock {

    public static synchronized void classLock(){
        int i=0;
        while (i++<500){
            System.out.println("类锁=="+i+Thread.currentThread().getName());
            /*try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
        }
    }

    public synchronized void duixiangLock(){
        int i=0;
        while (i++<500){
            System.out.println("对象锁=="+i+Thread.currentThread().getName());
            /*try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
        }
    }

    public static void main(String[] args) {
        TestClassLock testClassLock = new TestClassLock();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                testClassLock.duixiangLock();
                //TestClassLock.classLock();//TODO 如果两个线程都用类锁，是能锁住的，执行完一个才会执行另一个。
            }
        },"t-duixiang");

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                TestClassLock.classLock();
            }
        },"t-class");
        t1.start();
        t2.start();
    }
}
